有了鯨魚工具箱~再來設立個實驗室吧!
圖片來源:Docker (@Docker) / Twitter
經過了20多天終於弄好基礎了... 接著往開發前進~
GitLab 是一個軟體開發平台,可以使用 Git 做版本控制,另外 GitLab 也有提供 CI/CD 的功能,現在目標直接朝向 DevOps 功能的開發
官網是直接寫 GitLab 是一個 DevOps 平台 
GitLab 的核心是開源的,延伸出來分為社群版(CE)和企業版(EE),直接使用企業版就好,可以使用最低的免付費層級,後續有需要再訂閱付費就好
安裝方式就... 使用 helm 直接整套塞進 Kubernetes~
kubectl create ns gitlab
直接拿前面的 openssl 自簽憑證來用~
kubectl create secret -n gitlab generic gitlab-tls \
    --from-file=ca.pem \
    --from-file=tls.crt=example.domain.com.pem \
    --from-file=tls.key=example.domain.com.key
helm repo add gitlab https://charts.gitlab.io/
helm show values gitlab/gitlab --version 6.4.2  >> values.yaml
這設定檔有 1200 行好可怕...
建議如果有要修改的時候要從 gitlab document 看... 因為底下還有一堆 subcharts...
完整檔案放在 github Day 22 - gitlab/values.yaml
global:
  hosts:
    domain: example.domain.com
    ...
  ingress:
    configureCertmanager: false
    enabled: false
    ...
certmanager:
  install: false
  ...
nginx-ingress:
  enabled: false
prometheus:
  server:
    persistentVolume:
      storageClass: nfs-client
      size: 8Gi
  ...
redis:
  master:
    persistence:
      storageClass: nfs-client
      size: 5Gi
  ...
postgresql:
  image:
    tag: 14.5.0     # 可自選 postgresql 版本
  persistence:
    storageClass: nfs-client
    size: 8Gi
  ...
gitlab:
  gitaly:
    persistence:
      storageClass: nfs-client
      size: 50Gi
  ...
設定完 values.yaml 後安裝
helm install gitlab -f values.yaml --namespace gitlab gitlab/gitlab --version 6.4.2
因為要自己加 labels 所以沒辦法用預設,這裡要再補回 ingress
檔案放在 github Day 22 - gitlab/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-kas
  namespace: gitlab
spec:
  rules:
  - host: kas.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-kas
            port:
              number: 8150
        path: /
        pathType: Prefix
      - backend:
          service:
            name: gitlab-kas
            port:
              number: 8154
        path: /k8s-proxy/
        pathType: Prefix
  tls:
  - hosts:
    - kas.example.domain.com
    secretName: gitlab-tls
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-minio
  namespace: gitlab
spec:
  rules:
  - host: minio.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-minio-svc
            port:
              number: 9000
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - minio.example.domain.com
    secretName: gitlab-tls
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-registry
  namespace: gitlab
spec:
  rules:
  - host: registry.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-registry
            port:
              number: 5000
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - registry.example.domain.com
    secretName: gitlab-tls
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-webservice-default
  namespace: gitlab
spec:
  rules:
  - host: gitlab.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-webservice-default
            port:
              number: 8181
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - gitlab.example.domain.com
    secretName: gitlab-tls
kubectl apply -f ingress.yaml
根據自己設定的 hosts 和 ingress 設定的 gitlab-webservice host 登入網頁,以上面範例為 https://gitlab.example.domain.com

然後就被擋在門外了...
gitlab 安裝時會自動產生 root 的 password
要自己從 secret 抓出來...
kubectl get secret -n gitlab gitlab-gitlab-initial-root-password -o jsonpath={.data.password} | base64 --decode
拿到密碼後就能使用 root 登入
成功登入~ 

gitlab 安裝文檔真的有夠多,我還沒完全看完...
之後如果有改設定會再補充... Grafana 的部分沒多久後就要改了... 